#pragma

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>

// 1. 通用的容器打印函数, 可以打印任何类型的容器
template<typename T>
inline void printContainer(const T& container) {
    for (const auto& elem : container) std::cout << elem << " ";
    std::cout << std::endl;
}
// 2. 专为存储 std::pair 类型元素的容器设计
template<typename T>
inline void printContainerPair(const T& container) {
    for (auto& elem : container) {
        // 此处预期 elem 是一个 std::pair
        std::cout << elem.first << ": " << elem.second << std::endl;
    }
}
// 3. 专为存储 std::optional 类型元素的容器设计
template<typename T>
inline void printContainerOptional(const T& container) {
    for (const auto& elem : container) {
        // 此处预期 elem 是一个 optional 类型的元素, 打印之前, 先判定一下, 看是否有效
        if (elem) {
            std::cout << elem.value() << " ";
        } else {
            std::cout << "元素无效" << std::endl;
        }
    }
    std::cout << std::endl;
}